const result = require('./result');
var config = require('./config');

if(typeof process.conf != "object") process.conf = config;

module.exports = {
    /**
     * @type {config}
     */
    config: process.conf,
    result,
    /**
     * 解析分页
     * @param {Object} body 
     * @returns {{page: Number, limit: Number}} body
     */
    anyPage(body) {
        let limit = parseInt(body.limit);
        if(isNaN(limit) || limit < 1) limit = 10;
        
        let page = parseInt(body.page);
        if(isNaN(page) || page < 1) page = 1;
        page = page - 1;

        body.limit = limit;
        body.page = page;
        return body;
    },
    /**
     * 检测是否是一个 Promise
     * @param {Object} value 
     * @returns 
     */
    isPromise(value) {
        return (
            value &&
            typeof value === 'object' &&
            typeof value.then === 'function'
        );
    },
    /**
     * 给响应体设置跨域 
     * @param {Request|String} req 响应体或者链接
     * @param {Respone} res 响应体
     * @returns 
     */
    setCORS(req, res) {
        let domain = typeof req == "string" ? req : (req.get("origin")||req.get("Origin"));
        if(domain){
            // 跨域没有必要设置，使用 nginx 反向代理，和前端使用同一个端口
            // 设置跨域会导致 cookie 丢失，暂时没有解决方案，暂时还没有测试通过的方案
            // 需要设置这个才有 cookie，而且前端需要设置 axios.defaults.withCredentials = true;
            res.header("Access-Control-Allow-Credentials", true);
            //设置允许跨域的域名，*代表允许任意域名跨域
            res.header("Access-Control-Allow-Origin", domain);
            //允许的 header类型
            res.header("Access-Control-Allow-Headers","Content-Type,XFILENAME,XFILECATEGORY,XFILESIZE");
            // res.header("Access-Control-Allow-Headers","Content-Type,XFILENAME,XFILECATEGORY,XFILESIZE");
            //跨域允许的请求方式
            res.header("Access-Control-Allow-Methods","DELETE,PUT,POST,GET,OPTIONS");
            res.header("X-Powered-By",'weizhixi.com 1.0.0');    // Your Powered By
        }
        return res;
    }
    , listenServerPort(serve, port) {
        return new Promise((resolve, reject)=>{
            let Listener = (err)=>{
                serve.removeListener("error", Listener);    // 错误时移除监听
                resolve(err);
            }
            serve.on("error", Listener);                    // 开启监听
            serve.listen(port, function(err) {
                if(err){
                    reject(err) // 错误监听
                }
                serve.removeListener("error", Listener);    // 移除监听
                resolve();
            });
        })
    },
    /**
     * 获取任务队列的连接
     */
    connectAmqp() {
        amqp.connect('amqp://localhost', function(err, conn) {
          if (err) {
            console.error('Connection Error:', err);
            setTimeout(connect, 1000); // 尝试重新连接
            return;
          }
          connection = conn;
          connection.on('close', () => {
            console.log('Connection closed, attempting to reconnect...');
            connect(); // 尝试重新连接
          });
      
          // 创建通道等其他操作...
        });
    }
}